home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / util2 / fiflb381.lha / inlinef / fifo.h
C/C++ Source or Header  |  1995-12-09  |  3KB  |  125 lines

  1. #ifndef _INLINE_FIFO_H
  2. #define _INLINE_FIFO_H
  3.  
  4. #ifndef _CDEFS_H_
  5. #include <sys/cdefs.h>
  6. #endif
  7. #ifndef __INLINE_STUB_H
  8. #include <inline/stubs.h>
  9. #endif
  10.  
  11. __BEGIN_DECLS
  12.  
  13. #ifndef BASE_EXT_DECL
  14. #define BASE_EXT_DECL
  15. #define BASE_EXT_DECL0 extern struct Library *FifoBase;
  16. #endif
  17. #ifndef BASE_PAR_DECL
  18. #define BASE_PAR_DECL
  19. #define BASE_PAR_DECL0 void
  20. #endif
  21. #ifndef BASE_NAME
  22. #define BASE_NAME FifoBase
  23. #endif
  24.  
  25. BASE_EXT_DECL0
  26.  
  27. extern __inline long
  28. BufSizeFifo (BASE_PAR_DECL FifoHan fifo)
  29. {
  30.   BASE_EXT_DECL
  31.   register long res __asm("d0");
  32.   register struct Library * a6 __asm("a6") = BASE_NAME;
  33.   register FifoHan d0 __asm("d0") = fifo;
  34.   __asm __volatile ("jsr a6@(-0x3c:W)"
  35.   : "=r" (res)
  36.   : "r" (a6), "r" (d0)
  37.   : "d0", "d1", "a0", "a1", "cc", "memory");
  38.   return res;
  39. }
  40.  
  41. extern __inline void
  42. CloseFifo (BASE_PAR_DECL FifoHan fifo, long flags)
  43. {
  44.   BASE_EXT_DECL
  45.   register struct Library * a6 __asm("a6") = BASE_NAME;
  46.   register FifoHan d0 __asm("d0") = fifo;
  47.   register long d1 __asm("d1") = flags;
  48.   __asm __volatile ("jsr a6@(-0x24:W)"
  49.   : /* No Output */
  50.   : "r" (a6), "r" (d0), "r" (d1)
  51.   : "d0", "d1", "a0", "a1", "cc", "memory");
  52. }
  53.  
  54. extern __inline FifoHan
  55. OpenFifo (BASE_PAR_DECL char * name, long bytes, long flags)
  56. {
  57.   BASE_EXT_DECL
  58.   register FifoHan res __asm("d0");
  59.   register struct Library * a6 __asm("a6") = BASE_NAME;
  60.   register char * d0 __asm("d0") = name;
  61.   register long d1 __asm("d1") = bytes;
  62.   register long a0 __asm("a0") = flags;
  63.   __asm __volatile ("jsr a6@(-0x1e:W)"
  64.   : "=r" (res)
  65.   : "r" (a6), "r" (d0), "r" (d1), "r" (a0)
  66.   : "d0", "d1", "a0", "a1", "cc", "memory");
  67.   return res;
  68. }
  69.  
  70. extern __inline long
  71. ReadFifo (BASE_PAR_DECL FifoHan fifo, char ** buf, long bytes)
  72. {
  73.   BASE_EXT_DECL
  74.   register long res __asm("d0");
  75.   register struct Library * a6 __asm("a6") = BASE_NAME;
  76.   register FifoHan d0 __asm("d0") = fifo;
  77.   register char ** d1 __asm("d1") = buf;
  78.   register long a0 __asm("a0") = bytes;
  79.   __asm __volatile ("jsr a6@(-0x2a:W)"
  80.   : "=r" (res)
  81.   : "r" (a6), "r" (d0), "r" (d1), "r" (a0)
  82.   : "d0", "d1", "a0", "a1", "cc", "memory");
  83.   return res;
  84. }
  85.  
  86. extern __inline void
  87. RequestFifo (BASE_PAR_DECL FifoHan fifo, struct Message * msg, long req)
  88. {
  89.   BASE_EXT_DECL
  90.   register struct Library * a6 __asm("a6") = BASE_NAME;
  91.   register FifoHan d0 __asm("d0") = fifo;
  92.   register struct Message * d1 __asm("d1") = msg;
  93.   register long a0 __asm("a0") = req;
  94.   __asm __volatile ("jsr a6@(-0x36:W)"
  95.   : /* No Output */
  96.   : "r" (a6), "r" (d0), "r" (d1), "r" (a0)
  97.   : "d0", "d1", "a0", "a1", "cc", "memory");
  98. }
  99.  
  100. extern __inline long
  101. WriteFifo (BASE_PAR_DECL FifoHan fifo, char * buf, long bytes)
  102. {
  103.   BASE_EXT_DECL
  104.   register long res __asm("d0");
  105.   register struct Library * a6 __asm("a6") = BASE_NAME;
  106.   register FifoHan d0 __asm("d0") = fifo;
  107.   register char * d1 __asm("d1") = buf;
  108.   register long a0 __asm("a0") = bytes;
  109.   __asm __volatile ("jsr a6@(-0x30:W)"
  110.   : "=r" (res)
  111.   : "r" (a6), "r" (d0), "r" (d1), "r" (a0)
  112.   : "d0", "d1", "a0", "a1", "cc", "memory");
  113.   return res;
  114. }
  115.  
  116. #undef BASE_EXT_DECL
  117. #undef BASE_EXT_DECL0
  118. #undef BASE_PAR_DECL
  119. #undef BASE_PAR_DECL0
  120. #undef BASE_NAME
  121.  
  122. __END_DECLS
  123.  
  124. #endif /* _INLINE_FIFO_H */
  125.